//
//  HomeTableViewController.swift
//  SinaWeiBo20
//
//  Created by tarena on 16/3/18.
//  Copyright © 2016年 tarena. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD
private let homeCellId = "homeCellId"
class HomeTableViewController: BaseTableViewController {
    
    private var lastCount = 0
    //模型数组
    private lazy var statusListViewModel = StatusListViewModel()
    
    //下拉刷新控件
    let refreshContr = WBRefreshControl()
    
    //准备视图层次 此时 根视图 还是为nil 在没有super.loadView 之前 不要追踪view
    //检测到根视图为 nil 会执行loadView
    //为手写代码准备的，一旦实现这个方法 xib/sb 就会失效
    override func loadView() {
        super.loadView()
    }
    
    //视图层次准备完毕之后调用这个方法  一般需要自己添加视图在这个方法中执行
    //只会执行一次
    override func viewDidLoad() {
        super.viewDidLoad()
        if !UserAccountViewModel().userLogin {
            visitorLoginView?.setUIInfo(nil , title: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        prepareForTableView()
        
        loadData()
    
        tabBarItem.badgeValue = "0"
    
    }
    
    private func prepareForTableView(){
        //注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: homeCellId)
        
        //设置Cell   自动计算行高需要设置两个属性
        //1.设置预估行高
        tableView.estimatedRowHeight = 300
        //2.设置行高为自动计算
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //设置分割线 样式
        tableView.separatorStyle = .None
        
        //添加自定义下拉刷新控件
        tableView.addSubview(refreshContr)
        
        //添加监听事件
        refreshContr.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        //将小菊花设置为tableFooterView
        tableView.tableFooterView = indicatorView
        
        //设置点击状态栏快速回到顶部
        tableView.scrollsToTop = true
        
        //添加提示的文案
        self.navigationController?.navigationBar.addSubview(tipLabel)
        
        //移动最下面
        navigationController?.navigationBar.insertSubview(tipLabel, atIndex: 0)
        
    }
    // viewDidLoad 和 viewDidAppear 有啥区别 在使用的时候需要注意哪些
    //每次页面显示的时候  都会执行
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
    }
    override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
    }
    
    //MARK: 加载首页数据
    @objc private func loadData() {
        statusListViewModel.loadHomeData(indicatorView.isAnimating()) { (isSuccess) -> () in
            //等待网络请求结束之后 修改控件的刷新状体啊
            self.refreshContr.endRefreshing()
            if isSuccess {
                if self.indicatorView.isAnimating() {
                    //上拉操作
                    //停止转动
                    self.indicatorView.stopAnimating()
                }else{
                    //下拉刷新的操作
                    //刷新成功的提示
                    self.showIipLabel()
                }
                
                //记录上一次数组中的模型的数量
                self.lastCount = self.statusListViewModel.statuses.count
                //请求数据成功
                self.tableView.reloadData()
            }else{
                //请求数据失败
                SVProgressHUD.showErrorWithStatus("网络君正在睡觉,请稍后再试")
            }
        }
    }
    
    private func showIipLabel() {
        //记录数组中上一次的数据的数量
        let delta = self.statusListViewModel.statuses.count - lastCount
        
        let tipText = delta == 0 ? "没有新微博" : "有\(delta)条微博"
        
        tipLabel.text = tipText
        
        let rect = tipLabel.frame
        
        UIView.animateWithDuration(0.25, animations: { () -> Void in
            self.tipLabel.frame = CGRect(x: 0, y: 44, width: screenW, height: 44)
            }) { (_) -> Void in
                UIView.animateKeyframesWithDuration(0.25, delay: 1, options: [], animations: { () -> Void in
                    self.tipLabel.frame = rect
                    }, completion: { (_) -> Void in
                        print("OK")
                })
        }
        
    }

    private lazy var indicatorView:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
    
    private lazy var tipLabel: UILabel = {
        let label = UILabel(frame: CGRectMake(0, -64, screenW, 44))
        label.textColor = UIColor.whiteColor()
        label.textAlignment = .Center
        label.backgroundColor = themeColor
        return label
    }()
}


extension HomeTableViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.statusListViewModel.statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //使用这个方法 获取cell 手写代码是需要手动注册cell
        let cell = tableView.dequeueReusableCellWithIdentifier(homeCellId, forIndexPath: indexPath) as! StatusCell
        
        //如果正在加载最后一条cell  并且 小菊花没有转动的情况下 才去获取更多数据
        if indexPath.row == statusListViewModel.statuses.count - 1 && !indicatorView.isAnimating(){
            //正在加载最后一条cell
            //加载数据
            //转动小菊花 等网络数据获取完毕之后再停止转动 才能够继续加载更多数据
            indicatorView.startAnimating()
            //先转动菊花 再加载数据
            loadData()
        }
        cell.status = self.statusListViewModel.statuses[indexPath.row]
        return cell
    }
    
}
